extends Node

var 场景层:Node=null
var 弹窗层:Node=null
var 手上层:Node=null
var 提示层:Node=null

var 弹窗队列 = []
var 识别码:int=0

func 初始化(_场景层, _弹窗层,_手上层,_提示层):
	场景层=_场景层
	弹窗层=_弹窗层	
	手上层=_手上层
	提示层=_提示层
	
#region  场景部分
var 当前场景:Node=null:
	set(value):
		if 当前场景:
			当前场景.退出()			
			场景层.remove_child(当前场景)
			当前场景.queue_free()
		当前场景=value
		if 当前场景:
			场景层.add_child(当前场景)
	
var 当前弹窗:Node=null
		
func 切换场景(场景id:String,data:Dictionary={}):
	var 场景类=GameViewRegister.获取场景(场景id)
	if 场景类:
		当前场景=场景类.instantiate()
		当前场景.初始化(data)
		return 当前场景
	return null
#endregion

#region  弹窗部分	
func 获取识别码()->int:
	识别码+=1
	return 识别码
	
func 获取弹窗(id):
	for 弹窗 in 弹窗层.get_children():
		if typeof(id)==TYPE_INT and 弹窗.识别码==id:
			return 弹窗
		elif typeof(id)==TYPE_STRING and 弹窗.弹窗id==id:
			return 弹窗
	return null

func 打开弹窗(弹窗id,data=null):
	var 弹窗类=GameViewRegister.获取场景(弹窗id)
	if 弹窗类:
		var 弹窗=弹窗类.instantiate()
		弹窗.弹窗id=弹窗id	
		弹窗.识别码=获取识别码()
		弹窗层.add_child(弹窗)
		弹窗.初始化(data)
		return 弹窗
		
func 关闭弹窗(id):
	var 弹窗=获取弹窗(id)
	if 弹窗:
		弹窗.退出()
		弹窗层.remove_child(弹窗)
		弹窗.queue_free()			
#endregion

#region 手上卡牌相关
const 卡牌场景 = preload("res://卡牌/手上卡牌.tscn")
func 添加手上卡牌(卡牌数据:卡牌数据类):
	var 手上卡牌:手上卡牌类=卡牌场景.instantiate()
	手上层.add_child(手上卡牌)
	手上卡牌.显示卡牌(卡牌数据)
	
func 移除手上卡牌():
	for 卡牌 in 手上层.get_children():
		手上层.remove_child(卡牌)
#endregion

#region 提示信息相关
const 提示场景= preload("res://UI/提示信息.tscn")
func 显示提示信息(标题文字:String,内容文字:String=""):
	var 提示信息:提示信息类=提示场景.instantiate()
	提示层.add_child(提示信息)
	提示信息.显示文字(标题文字,内容文字)
	
func 关闭提示信息():
	for 提示 in 提示层.get_children():
		提示层.remove_child(提示)
#endregion
